/*
 * @lc app=leetcode.cn id=917 lang=javascript
 *
 * [917] 仅仅反转字母
 */

// @lc code=start
/**
 * @param {string} S
 * @return {string}
 */
var reverseOnlyLetters = function (S) {
    
    let i = 0, r = S.length - 1
    let s=S.split("")
    let res=new Array(s.length)
    while (r>=0) {
        if(!(/[a-zA-Z]/.test(s[r])))
        {res[r]=s[r];s.splice(r,1)}
        r--
    }//这一步比较关键，从后往前面删除，可以纠正删除顺序
    s.reverse()
    let j=0
    for(let i=0;i<s.length;){
        if(res[j]==undefined){
            res[j]=s[i];i++
        }
        j++
    }
    return res.join("")
};
// @lc code=end

reverseOnlyLetters("a-bC-dEf-ghIj")
var reverseOnlyLetters = function(S) {
    var arr = S.match(/[a-zA-Z]/g)
    if (arr === null) return S
    return S.replace(/[a-zA-Z]/g, () => arr.pop())
  }//正则很简单，使用栈的思想，push再POP拼接，如果是字母，就用POP出来的替换掉，如果不是，就保持不变即可
  
